package com.css.fxfzfxqh.modules.modelManagement.repository.impl;

import com.css.fxfzfxqh.modules.modelManagement.entity.EconomicLossesEntity;
import com.css.fxfzfxqh.modules.modelManagement.param.PagePersonnelCasualtiesParam;
import com.css.fxfzfxqh.modules.modelManagement.repository.EconomicLossesRepository;
import com.css.fxfzfxqh.modules.modelManagement.vo.PagePersonnelCasualtiesVo;
import com.css.fxfzfxqh.util.PlatformObjectUtils;
import com.css.fxfzfxqh.zcpt.sys.service.SysAreaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Repository
public class EconomicLossesRepositoryImpl implements EconomicLossesRepository {

    @Resource
    private JdbcTemplate jdbcTemplate;

    @Autowired
    private SysAreaService areaService;

    @Override
    public int getSizeByName(String modelName) {
        String sql = "select count(id) from fxqh_economic_losses where model_name = '"+modelName+"' and is_valid = '1'";
        try {
            return jdbcTemplate.queryForObject(sql,Integer.class) ;
        } catch (DataAccessException e) {
            return 0;
        }
    }

    @Override
    public void save(EconomicLossesEntity entity) {
        jdbcTemplate.update("insert into fxqh_economic_losses  (id,model_name,is_default,province,city,create_user_id,create_user_name,create_time,org_id,org_name,is_valid,structure_lossess,indoor_lossess,basic1,slight1,mid1,serious1,destroy1,basic2,slight2,mid2,serious2,destroy2,basic3,slight3,mid3,serious3,destroy3,basic4,slight4,mid4,serious4,destroy4,basic5,slight5,mid5,serious5,destroy5,basic6,slight6,mid6,serious6,destroy6,basic7,slight7,mid7,serious7,destroy7,basic8,slight8,mid8,serious8,destroy8,basic9,slight9,mid9,serious9,destroy9,life_ratio1,life_ratio2,other_ratio1,other_ratio2,basic10,slight10,mid10,serious10,destroy10 ) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
                entity.getId(),entity.getModelName(),entity.getIsDefault(),entity.getProvince(),entity.getCity(),entity.getCreateUserId(),entity.getCreateUserName(),entity.getCreateTime(),entity.getOrgId(),entity.getOrgName(),entity.getIsValid(),entity.getStructureLossess(),entity.getIndoorLossess(),entity.getBasic1(),entity.getSlight1(),entity.getMid1(),entity.getSerious1(),entity.getDestroy1(),entity.getBasic2(),entity.getSlight2(),entity.getMid2(),entity.getSerious2(),entity.getDestroy2(),entity.getBasic3(),entity.getSlight3(),entity.getMid3(),entity.getSerious3(),entity.getDestroy3(),entity.getBasic4(),entity.getSlight4(),entity.getMid4(),entity.getSerious4(),entity.getDestroy4(),entity.getBasic5(),entity.getSlight5(),entity.getMid5(),entity.getSerious5(),entity.getDestroy5(),entity.getBasic6(),entity.getSlight6(),entity.getMid6(),entity.getSerious6(),entity.getDestroy6(),entity.getBasic7(),entity.getSlight7(),entity.getMid7(),entity.getSerious7(),entity.getDestroy7(),entity.getBasic8(),entity.getSlight8(),entity.getMid8(),entity.getSerious8(),entity.getDestroy8(),entity.getBasic9(),entity.getSlight9(),entity.getMid9(),entity.getSerious9(),entity.getDestroy9(),entity.getLifeRatio1(),entity.getLifeRatio2(),entity.getOtherRatio1(),entity.getOtherRatio2(),entity.getBasic10(),entity.getSlight10(),entity.getMid10(),entity.getSerious10(),entity.getDestroy10());
    }

    @Override
    public Map<String, Object> page(PagePersonnelCasualtiesParam param, int curPage, int pageSize) {
        StringBuilder sql = new StringBuilder("select * from fxqh_economic_losses where is_valid = '1'");
        if (!PlatformObjectUtils.isEmpty(param.getModelName())) {
            sql.append(" and model_name like '%" + param.getModelName() + "%'");
        }
        if (!PlatformObjectUtils.isEmpty(param.getProvince())) {
            if ("cd726776c7de41e4a41dcdb3d90b2806".equals(param.getProvince()) || "225ac763ab714524b87d95140a93a4a5".equals(param.getProvince()) || "8a3f7d3f78ad456f92f487a979091c7f".equals(param.getProvince()) || "afcbf07008a34c2e85917cfd34008033".equals(param.getProvince())) {
                //拿到北京上海天津重庆四省的省id
                String pid = areaService.getParentId(param.getProvince());
                param.setProvince(pid);
            }
            sql.append(" and province='").append(param.getProvince()).append("'");
        }
        if (!PlatformObjectUtils.isEmpty(param.getCity())) {
            sql.append(" and (position('").append(param.getCity()).append("' in city) > 0 ");
            sql.append(" or city='全部')");
        }
        Integer total = jdbcTemplate.query(sql.toString(), new BeanPropertyRowMapper<>(PagePersonnelCasualtiesVo.class)).size();
        StringBuilder limitSql = new StringBuilder(" limit " + pageSize + " offset " + (curPage - 1) * pageSize);
        StringBuilder orderSql = new StringBuilder(" order by is_default desc, create_time desc");
        sql.append(orderSql).append(limitSql);
        List<PagePersonnelCasualtiesVo> list = jdbcTemplate.query(sql.toString(), new BeanPropertyRowMapper<>(PagePersonnelCasualtiesVo.class));
        HashMap<String, Object> resultMap = new HashMap();
        resultMap.put("total", total);
        resultMap.put("rows", list);
        return resultMap;
    }

    @Override
    public void deleteById(String id) {
        String sql = "update fxqh_economic_losses set is_valid = '0' where id = '"+id+"'";
        jdbcTemplate.update(sql);
    }

    @Override
    public void updateById(EconomicLossesEntity entity) {
        jdbcTemplate.update("UPDATE  fxqh_economic_losses  SET model_name=?,province=?,city=?,update_user_id=?,update_time=?,structure_lossess=?,indoor_lossess=?,basic1=?,slight1=?,mid1=?,serious1=?,destroy1=?,basic2=?,slight2=?,mid2=?,serious2=?,destroy2=?,basic3=?,slight3=?,mid3=?,serious3=?,destroy3=?,basic4=?,slight4=?,mid4=?,serious4=?,destroy4=?,basic5=?,slight5=?,mid5=?,serious5=?,destroy5=?,basic6=?,slight6=?,mid6=?,serious6=?,destroy6=?,basic7=?,slight7=?,mid7=?,serious7=?,destroy7=?,basic8=?,slight8=?,mid8=?,serious8=?,destroy8=?,basic9=?,slight9=?,mid9=?,serious9=?,destroy9=?,life_ratio1=?,life_ratio2=?,other_ratio1=?,other_ratio2=?,basic10=?,slight10=?,mid10=?,serious10=?,destroy10=?"
                        +" where id=?",
                entity.getModelName(),entity.getProvince(),entity.getCity(),entity.getUpdateUserId(),entity.getUpdateTime(),entity.getStructureLossess(),entity.getIndoorLossess(),entity.getBasic1(),entity.getSlight1(),entity.getMid1(),entity.getSerious1(),entity.getDestroy1(),entity.getBasic2(),entity.getSlight2(),entity.getMid2(),entity.getSerious2(),entity.getDestroy2(),entity.getBasic3(),entity.getSlight3(),entity.getMid3(),entity.getSerious3(),entity.getDestroy3(),entity.getBasic4(),entity.getSlight4(),entity.getMid4(),entity.getSerious4(),entity.getDestroy4(),entity.getBasic5(),entity.getSlight5(),entity.getMid5(),entity.getSerious5(),entity.getDestroy5(),entity.getBasic6(),entity.getSlight6(),entity.getMid6(),entity.getSerious6(),entity.getDestroy6(),entity.getBasic7(),entity.getSlight7(),entity.getMid7(),entity.getSerious7(),entity.getDestroy7(),entity.getBasic8(),entity.getSlight8(),entity.getMid8(),entity.getSerious8(),entity.getDestroy8(),entity.getBasic9(),entity.getSlight9(),entity.getMid9(),entity.getSerious9(),entity.getDestroy9(),entity.getLifeRatio1(),entity.getLifeRatio2(),entity.getOtherRatio1(),entity.getOtherRatio2(),entity.getBasic10(),entity.getSlight10(),entity.getMid10(),entity.getSerious10(),entity.getDestroy10(),
                entity.getId()
        );
    }

    @Override
    public EconomicLossesEntity getById(String id) {
        String sql = "select * from fxqh_economic_losses where id = '"+id+"'";
        try {
            return jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<>(EconomicLossesEntity.class));
        } catch (DataAccessException e) {
            return null;
        }
    }
}
